
// https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/submissions/431608601/
class MaxProfit {
    public int maxProfit(int[] prices) {
        int [][] dp = new int[prices.length][5];
        dp[0][1] = -prices[0];
        dp[0][3] = -prices[0];
        for(int i = 1; i < prices.length ; i ++)
        {
           // dp[i][0] = dp[i-1][0];
            // 第一次买入
            dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);
            // 第一次卖出
            dp[i][2] = Math.max(dp[i-1][2],dp[i-1][1] + prices[i]);
            // 第二次买入
            dp[i][3] = Math.max(dp[i-1][3],dp[i-1][2] - prices[i]);
            // 第二次卖出
            dp[i][4] = Math.max(dp[i-1][4],dp[i-1][3]+ prices[i]);
        }
        return dp[prices.length-1][4];

    }
}